Standard, framework-agnostic HTTP interfaces for JavaScript servers and clients.
Installation
npm install servie --save
Usage
import { Body, Request, Response, Headers, AbortController } from "servie";
Servie is a universal package, meaning node.js and browsers are supported without needing configuration. This means the primary endpoint requires some dom
types in TypeScript. When in a node.js, or browser, only environment, prefer importing servie/dist/{node,browser}
instead.
Body
Base HTTP class shared between Request
and Response
.
new Body(body, headers);
Body
Supported body types, depending on environment:
- Node.js -
string | Buffer | ArrayBuffer | Readable | null | undefined
- Browser -
string | ArrayBuffer | ReadableStream | null | undefined
Properties and Methods
bodyUsed
Boolean whether the body is already consumedtext()
Returns the body as a Promise<string>
json()
Returns the body with JSON.parse
as Promise<any>
arrayBuffer()
Returns the body as a Promise<ArrayBuffer>
clone()
Clones an unconsumed bodydestroy()
Consumes and destroys the body
Request
HTTP class for modelling a Request
, extends Body
.
new Request(input [, init]);
Input
A URL string or another Request
instance to clone from.
Init
method?
HTTP request method.body?
Any support body types.signal?
A signal from an AbortController
.headers?
A map, list of tuples, or Header
instance to initialize from.trailer?
A promise resolve to a support header initialization types (above).
Properties and Methods
url
Requested url stringmethod
Requested method stringsignal
Signal event emitterheaders
A Headers
instancetrailer
A Promise<Headers>
instanceclone()
Clones the request into a new instance
Response
HTTP class for modelling a Response
, extends Body
.
new Response([body [, init]]);
Body
One of the support body types (above).
Init
status?
The numeric HTTP response status codestatusText?
The HTTP response status text
Properties and Methods
status
The numeric HTTP response status codestatusText
The HTTP response status textok
Boolean indicates successful response (status
between 200 and 299)headers
A Headers
instancetrailer
A Promise<Headers>
instanceclone()
Clones the response into a new instance
Map representation of HTTP headers.
new Headers([init]);
Init
Initialize headers from Iterable<HeaderTuple>
, a HeadersObject
or an existing Headers
instance.
Methods
set(name: string, value: string | string[]): void
Set a HTTP header by overriding case-insensitive headers of the same nameappend(name: string, value: string | string[]): void
Append a HTTP headerget(name: string): string | undefined
Retrieve a case-insensitive HTTP headergetAll(name: string): string[]
Retrieve a list of matching case-insensitive HTTP headershas(name: string): boolean
Check if a case-insensitive header is already setdelete(name: string): void
Delete a case-insensitive headerasObject(): HeadersObject
Return the lower-cased headers as a plain objectextend(obj: HeadersInit): this
Extends the current headers with an objectkeys()
Iterable of the available header namesvalues()
Iterable of header valuesentries()
Iterable of headers as [key, value]
clear()
Clears the headers instanceclone()
Clones the Headers
instance
AbortController
Simple controller for aborting a Request
instance.
new AbortController();
Properties and Methods
signal
A Signal
instance to pass to a Request
abort()
Used to abort any listening requests through the signal
Signal
Tiny event emitter for communicating during a request.
Methods
aborted
Boolean indicating whether the request is abortedon(type, fn)
Attach an event listener to an event typeoff(type, fn)
Remove an event listener from an event typeeach(fn)
Attach an event listener for all eventsnone(fn)
Remove a global event listeneremit(type, ...args)
Emit an event to all listeners
Standard Events
abort
The request has been abortedrequestBytes
Emitted on request progress with current bytesrequestEnded
The request has endedrequestStarted
The request has been startedresponseBytes
Emitted on response progress with current bytesresponseEnded
The response has endedresponseStarted
The response has started
Plugins can emit new types of events.
Implementation
If you're building the transports for Servie, there are some life cycle events you need to be aware of:
- Listen to the
error
event on signal
for errors - Listen to the
abort
event on signal
to destroy the connection - Resolve
trailer
promise and append to HTTP request or response - There are some existing built-in type-safe events in
SignalEvents
you can support
JavaScript
This module is designed for ES2017 environments and published with TypeScript definitions on NPM.
License
Apache 2.0